package bishi;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

public class CompletableFutureDemo {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        System.out.println("主线程开始: " + Thread.currentThread().getName());

        // 启动异步任务 - 这将在后台线程中执行
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            System.out.println("异步任务开始: " + Thread.currentThread().getName());
            try {
                TimeUnit.SECONDS.sleep(10); // 模拟耗时操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "异步任务完成";
        });

        // 注册回调 - 当异步任务完成时自动执行
        future.thenAccept(result -> {
            System.out.println("回调执行: " + Thread.currentThread().getName());
            System.out.println("收到结果: " + result);
        });

        // 主线程继续执行其他工作
        System.out.println("主线程继续执行其他任务...");

        // 模拟主线程工作
        for (int i = 1; i <= 3; i++) {
            System.out.println("主线程工作 " + i + "/3");
            TimeUnit.MILLISECONDS.sleep(500);
        }
        System.out.println("主线程结束: " + Thread.currentThread().getName());
        // 等待异步任务完成（如果需要）
        String s = future.get();
        System.out.println(s);

    }
}
